package commomgame;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */


import java.util.ArrayList;

/**
 * Essa classe representa as regiões presentes no jogo de paciencia.
 * Sendo elas, Região de Descarte, Região de Fundação e Região de Reservas
 * Uma região é formada de subregiões, ou seja, casa região é um conjunto de subregiões, as quais armazenam as cartas.
 * @author Fernanda & Igo
 */
public class Region {

    /**
     *
     */
    protected ArrayList<SubRegion> region = new ArrayList<SubRegion>();
    /**
     *
     */
    protected int numberOfSubRegions;
    /**
     *
     */
    protected int numberOfCards;

    /**
     *
     */
    protected RulesOfMovement rulesOfMovement;


    /**
     *
     * @param numberOfSubRegions
     */
    public Region(int numberOfSubRegions) {
        this.numberOfSubRegions = numberOfSubRegions;
        this.createRegion();
    }


    /**
     * Retorna o objeto da classe RulesOfMovemente
     * @return
     */
    public RulesOfMovement getRulesOfMovement() {
        return rulesOfMovement;
    }

    /**
     * Define o objeto da classe RulesOfMovemente
     * @param rulesOfMovement
     */
    public void setRulesOfMovement(RulesOfMovement rulesOfMovement) {
        this.rulesOfMovement = rulesOfMovement;
    }


    /**
     * Cria as subregiões que irão compor a região, ou seja, as estruturas que irão armazenar as cartas
     */
    public void createRegion() {
        for (int i = 0; i < this.getNumberOfSubRegions(); i++) {
            region.add(new SubRegion());
        }
    }

    /**
     * Retorna  número de subregiões de cada região
     * @return inteiro referente ao numero de subregiões
     */
    public int getNumberOfSubRegions() {
        return numberOfSubRegions;
    }

    /**
     * Define o número de subregiões de uma região
     * @param numberOfSubRegions inteiro referente ao número de subregiões
     */
    public void setNumberOfSubRegions(int numberOfSubRegions) {
        this.numberOfSubRegions = numberOfSubRegions;
    }

    /**
     * Retorna o número de cartas presente na região
     * @return inteiro que representa o numero de cartas na região
     */
    public int getNumberOfCards() {
        return numberOfCards;
    }

    /**
     *Define o número de cartas da região
     * @param numberOfCards
     */
    public void setNumberOfCards(int numberOfCards) {
        this.numberOfCards = numberOfCards;
    }

    /**
     *Retorna o conjunto de subregiões que forma a região
     * @return o conjunto de subregiões
     */
    public ArrayList<SubRegion> getRegion() {
        return region;
    }

    /**
     *Define o conjunto de subregiões que forma a região
     * @param region o conjunto de subregiões
     */
    public void setRegion(ArrayList<SubRegion> region) {
        this.region = region;
    }


    /**
     *Retorna o número de subregiões que compõe a região
     * @return inteiro referente ao número de subregiões
     */
    public int howManySubRegions(){
        return this.getRegion().size();
    }


    /**
     *Verifica a existência de cartas nas subregiões
     * @return true se não existir cartas em todas as subregioes, caso contrário, false
     */
    public boolean isAnEmptyRegion(){

        for(int i=0; i< this.numberOfSubRegions; i++){
            for(int j = 0; j< this.region.get(i).getSize();i++){
                return false;
            }
        }
        
        return true;
    }
 
    


}
